בשיעור הקודם למדנו לנהל את המידע שלנו בעזרת dplyr ו tidyr .
בשיעור הזה נתמקד בשתי נושאים חשובים:
ggplot2ggplot2 - שפה של גרפיקהיש הרבה אפשרויות ליצר גרפים ב R . החל מיצירת גרפים בעזרת הפקודות הבסיסיות ב R ועד שימוש בחבילות D3 למיניהם. אבל, הבולטת מבין עשרות החיבלות היא ggplot2 - אחת החבילות הבולטות ב tidyverse .
החבילה תפסה מקום מרכזי בעיקר בזכות השפה העקבית והברורה שבה היא משתמשת והאפשרות לשלב מספר גרפים זו על גבי השניה בצורה קלה ומהירה.
הפילוסופיה הבסיסית של החבילה היא לעבוד בשכבות, דבר המקובל מאוד בעולם עיצוב גרפי…
העקרונות של בניית גרף הן:
כל גרף מורכב מאובייקט בסיס שעליו מוסיפים שכבות
כל שכבה היא פקודה גרפית בפני עצמה וניתן לשים אחת על גבי השניה בעזרת הסימן +
השכבות שולטות בתוכן (סוג גרף) באסטטיקה ובעיצוב של הגרף
ניתן לשמור את התוצאות בתור אובייקט ולהשתמש בהן אחר כך ולהוסיף עליהם עוד ועוד שכבות
הפקודות של ggplot מורכבות ממספר פרמטרים שניתן להגדיר בכל שכבה:
כדי לייצר גרף, חייב להיות אובייקט בסיסי שאפשר לבנות עליו. את האובייקט הזה בונים בעזרת הפקודה ggplot הכוללת את שם הטבלה ממנו שולפים את הנתונים ובד“כ התייחסות לנתונים שרוצים להשתמש בהן (אם כי זה לא חובה).
לדוגמא
library(ggplot2)
library(dplyr)
santander_grp <- Santander_sample %>%
filter(renta>1000 & renta<1000000) %>%
group_by(fecha_dato, segmento, ind_cc) %>%
slice(1:1000)
N_month_seg <- Santander_sample %>%
group_by(fecha_dato, segmento) %>%
summarise(n_pop = n(),
sum_cc = sum(ind_cc))
ggplot( data = santander_grp)
השלב הבא הוא לבחור את התפקיד שאנו רוצים שכל משתנה ישחק.
את זה עושים בעזרת הפקודה aes.
חשוב: בכל פעם שרוצים לפנות לשם של משתנה צריך להשתמשת בפקודה aes
בד“כ נגדיר את התפקידים הבסיסיים של המשתנים כשיוצרים את האובייקט, בתוך פקודת ה ggplot .
לדוגמא אם נרצה את segmento על ציר ה x ואת renta על ציר ה y , נכתוב משהו כזה:
ggplot(data= santander_grp, aes(x = segmento , y = renta))
מספר נקודות נוספות:
בכל אחד מהשכבות ניתן להגדיר תפקיד למשתנים בעזרת aes
ניתן להגדיר בשכבות שונות משתנים מטבלאות שונים - כל עוד הם בעלי אותו שם
אם לא מציינים באותו שכבה טבלת נתונים, הפקודה ישתמש בטבלת הנתונים שהוגדרה בפקודה ggplot
השלב הבא הוא לבחור שכבה הקובעת איזה גרף אנו רוצים להציג.
כל סוגי הגרפים שניתן להציג מתחילים ב geom_
אם תתחילו לכתוב את זה יצוצו לכם כל האפשרויות.
השימושיים ביותר:
ggplot(data= santander_grp, aes(x = age , y = renta)) +
geom_point()
ggplot(data= santander_grp, aes(x = age )) +
geom_histogram()
+:ggplot(data= santander_grp, aes(x = age , y = renta)) +
geom_point() +
geom_smooth()
עיצוב הגרף נעשה בעזרת הגדרת הפרמטרים ל scales שרוצים לעצב.
הפרמטריים הנפוצים ביותר:
את הפרמטרים לעיצוב הגרף ניתן להגדיר בשלוש מקומות:
geom_ בצורה רגילהgeom_ בשילוב עם משתנה בעזרת aesscale_ לגרףלמשל לצייר היסטוגרמה עם מילוי כחול ומסגרת שחורה נכתוב:
ggplot(data= santander_grp, aes(x = age )) +
geom_histogram( fill = "blue", color = "black")
אבל אם רוצים להשתמש בפרמטרים צריך להשתמש בתוך הפקודה aes. למשל, הפקודה
ggplot(data= santander_grp, aes(x = age )) +
geom_histogram(aes(fill = segmento))
ואפילו אפשר לבחור scales לפי תנאי על משתנה, למשל:
ggplot(data= santander_grp, aes(x = age , y = renta)) +
geom_jitter(aes(color = age<35))
לבסוף, ניתן להשתמש ב scales בחלקים אחרים של הגרף כדי להוסיף כותרות וכו’
library(scales)
ggplot(data= santander_grp, aes(x = age , y = renta)) +
geom_point(aes(color = segmento)) +
scale_y_continuous(limits = c(0,250000), label = comma) +
scale_x_continuous(limits = c(20,85))
ggplot(data= santander_grp, aes(x = age , y = renta)) +
geom_point(aes(color = segmento)) +
scale_y_continuous(limits = c(0,250000), label = comma) +
scale_x_continuous(limits = c(20,85)) +
scale_color_brewer(palette = 2)
בעזרת מספר פקודות אפשר לתת שמות לצירים וכותרת לגרף
ואפשר לשלוט במקראה בעזרת
ggplot(data= santander_grp, aes(x = age , y = renta)) +
geom_point(aes(color = segmento)) +
geom_smooth(aes(linetype = age<35)) +
scale_y_continuous(limits = c(0,250000), label = comma) +
scale_x_continuous(limits = c(20,85)) +
scale_color_brewer(palette = 2) +
labs(title = "this is the Title"
, x = "Look behind you"
, y = "Dont look down")
ראינו איך לצייר גרף לפי קבוצות עם צבעים… אבל אם נרצה גרף נפרד לכל קבוצה נציין זאת בפקודה facet_wrap ככה:
facet_wrap(~grpVar)
אם נרצה לפי שורות :
facet_wrap(grpVars~)
ולפי שני מימדים:
facet_grid(grpVar1~grpVar2)
למשל:
ggplot(data= santander_grp, aes(x = age , y = renta)) +
geom_point() +
geom_smooth() +
facet_wrap(~segmento)
כפי שאתם רואים הצירים כבר לא מתאימים לכל קבוצה
ואם רוצים לשחרר את הצירים כדי שנוכל לראות מה קורה:
ggplot(data= santander_grp, aes(x = age , y = renta)) +
geom_point() +
geom_smooth() +
facet_wrap(~segmento, scales = "free")
ואם רוצים לפי שתי משתנים משתמשים ב facet_grid ככה:
ggplot(data= santander_grp, aes(x = age , y = renta)) +
geom_point() +
geom_smooth() +
facet_grid(sexo ~ segmento, scales = "free")
ישנם הרבה גרפים שקוראים להם והם עושים שלב ביניים סטטיסטי לפני שמציירים את הגרף.
למשל, היסטוגרמה סופרת את המקרים של כל קבוצה, ועוד…
ניתן לשלוט ולשנות את הניתוח הסטטיסטי שנעשה (לדוגמא אם רוצים אחוזים במקום ספירה) על ידי הגדרת הסטטיסטי של אותו גרף
אפשר לשלוט על פרמטרים סטטיסטים של האובייקט בתוך השכבה של הגרף, למשל מספר התאים בהיסטוגרמה או בדוגמא שלנו, שיטת ההחלקה:
ggplot(data= santander_grp, aes(x = age , y = renta)) +
geom_point() +
geom_smooth(method = "lm" ) +
facet_wrap(~segmento, scales = "free")
אחד הסטטיסטיקות היותר שימושיות הוא - ללא סטטיסטיקה.
זה שימושי במיוחד כשהנתונים שלנו כבר עברו עיבוד סטטיסטי ואנחנו רק רוצים להציג את התוצאות ב geom_bar
הפקודה במקרה זה הוא stat = "identity"
ggplot(data= N_month_seg, aes(x = fecha_dato , y = n_pop)) +
geom_bar(stat = "identity") +
facet_wrap(~segmento)
ניתן גם לשלוט על אופן ההצגה של הגרף כשיש משתנה קבוצתי בעזרת position
דבר זה שימושי בעיקר במקרה הבא:
ggplot(data= N_month_seg, aes(x = fecha_dato , y = n_pop)) +
geom_bar(stat = "identity", aes(fill = segmento))
ggplot(data= N_month_seg, aes(x = fecha_dato , y = n_pop)) +
geom_bar(stat = "identity", aes(fill = segmento), position = "fill")
ggplot(data= N_month_seg, aes(x = fecha_dato , y = n_pop)) +
geom_bar(stat = "identity", aes(fill = segmento), position = "dodge")
ggplot(data= N_month_seg, aes(x = fecha_dato , y = n_pop)) +
geom_bar(stat = "identity", aes(fill = segmento),alpha=0.3, position = "identity")
לפעמים גם צריכים לשנות את סוג הקוארדינטות. או את הסגנון שלהם
הדבר בעיקר שיומשי אם רוצים להחליף את הצירים . למשל:
ggplot(data= N_month_seg, aes(x = fecha_dato , y = n_pop)) +
geom_bar(stat = "identity", aes(fill = segmento), position = "fill") +
coord_flip()
ggplot(data = santander_grp, aes(x = nomprov, y = renta)) +
geom_boxplot(aes(fill = nomprov)) +
coord_flip() +
guides(fill = "none")
על כל שאר האספקטים של הגרף ניתן לשלוט בעזרת פקודת ה theme
לא ניכנס לכל הפרטים של הקוד - במקום זה נלמד איך להשתמש ב add -in שהורדתי עבורכם בשם
themeAssistant .
מבין המוני הדברים שאפשר לעשות ב theme נדגים אחד , שיקטין לנו את ה font בציר ה y:
ggplot(data = santander_grp, aes(x = nomprov, y = renta)) +
geom_boxplot(aes(fill = nomprov)) +
coord_flip() +
guides(fill = "none") +
theme(axis.text.y =element_text(size = 5) )
מומלץ להשתמש בשתי הבילות dplyr ו ggplot2 ביחד , במיוחד כשמעבדים נתונים רק לצורך גרפי.
רק תשימו לב לא להתבלבל בין ה + לבין ה %>% .
למשל אם נרצה לסנן את הנתונים לפני ההצגה:
santander_grp %>%
filter(renta<100000 & age>20 & age<50) %>%
ggplot( aes(x = age , y = renta)) +
geom_point() +
geom_smooth() +
facet_wrap(~segmento, scales = "free")
בשנים האחרונות יש פיצוץ בסוגי הגרפים תומכי html שניתן לייצר.
כאן אדגים רק את התוצרים של חלק מהם…
d3heatmap - creates interactive D3 heatmaps including support for row/column highlighting and zooming.
library(d3heatmap)
d3heatmap(mtcars, scale="column", colors="Blues")
Dygraphs - provides rich facilities for charting time-series data in R and includes support for many interactive features.
library(dygraphs)
dygraph(nhtemp, main = "New Haven Temperatures") %>%
dyRangeSelector(dateWindow = c("1920-01-01", "1960-01-01"))
highcharter - make graphs in th Java Highlighter style: